<?php

class Evenement {
  /**
   * L'id de l'évènement
   * @var du type entier (taille 8)
   */
  private $id;
  
  /**
   * Le nom de l'�v�nement
   */
  private $nom;

  /**
   * La date début de l'évènement
   * @var du type entier, est en réalité un timestamp
   */
  private $date_debut;

  /**
   * La date de fin de l'évènement
   * @var du type entier, est en réalité un timestamp php
   */
  private $date_fin;

  /**
   * Le lien vers la source de cet �v�nement, g�n�ralement un post du forum
   */
  protected $lien;
  
  /**
   * Le thème de l'évènement :
   */
  private $theme;
  
  /**
   * La description de l'évènement
   * @var chaine de caractère
   */
  private $description;
  
  /**
   * Le projet auquel est lié l'évènement
   * @var Projet projet
   */
  private $projet;
  
  /**
  * L'évènement doit être affiché tous les ans dans le calendrier
  * @var boolean
  */
  private $recurrent;
  
  /**
  * Le nom de son occurence
  * @var string
  */
  private $occurName;
  
  /**
   * Le constructeur de la classe, il suffit de donner un id en entrée pour créer l'objet
   * @param int $id_event
   */
  public function __construct($id_event = null) {
  	global $db;
  	
  	if($id_event != null) {
	  	$infos = "SELECT
	  				id_evenement
	  				, nom_evenement
	  				, description_evenement
	  				, date_debut
	  				, date_fin
	  				, theme
	  				, projet
	  				, lien
					, recurrent
					, occurName
	  			FROM
	  				" . CALENDRIER_EVENEMENT_TABLE . "
	  			WHERE
	  				id_evenement = '".(int) $id_event."'
	  			LIMIT 0,1";
	  	$result = $db->sql_query($infos);
	  	$infos = $db->sql_fetchrow($result);
	  	$db->sql_freeresult($result);

	  	//On affecte les attributs
	  	$this->id = $infos['id_evenement'];
	  	$this->nom = $infos['nom_evenement'];
	  	$this->description = $infos['description_evenement'];
	  	$this->date_debut = $infos['date_debut'];
	  	$this->date_fin = $infos['date_fin'];
	  	$this->theme = new Categorie($infos['theme']);
	  	$this->lien = $infos['lien'];
	  	$this->projet = new Projet((int) $infos['projet']);
		$this->recurrent = $infos['recurrent'];
		$this->occurName = $infos['occurName'];
  	}
  }
  
  /**
   * Cette fonction permet de voir la présentation de l'évènement, dans le template phpBB
   * @param boolean $boucle : permet de déterminer si l'évènement est affiché indépendamment 
   * ou dans une boucle
   * @param string $nested : si on est dans une boucle imbriqué voici le nom de la boucle supérieure, 
   * ce paramètre n'a aucun intérêt si on n'est pas dans une boucle, il ne sera pas considéré dans le code
   */
  public function voir_presentation($boucle = false, $nested = null, $date = null)
  {
  	global $template;

  	$infos = array(
	  		'EVENT_ID' 					=> $this->id,
	  		'EVENT_NOM' 				=> $this->nom,
	  		'EVENT_DESCRIPTION'	 		=> $this->description,
  			'EVENT_PROJET_ID' 			=> $this->projet->getId(),
  			'EVENT_PROJET_NOM'			=> $this->projet->getNom(),
  			'EVENT_THEME_ID'			=> $this->theme->getId(),
  			'EVENT_THEME_NOM'			=> $this->theme->getTitre(),
  			'EVENT_THEME_LOGO'			=> $this->theme->getLogo(),
  			'EVENT_THEME_COLOR'			=> $this->theme->getColor(),
  			'EVENT_DEBUT' 				=> date('d/m/Y',$this->date_debut),
  			'EVENT_FIN' 				=> date('d/m/Y', $this->date_fin),
  			'EVENT_LINK'				=> $this->lien,
			'EVENT_RECURRENT'			=> $this->recurrent,
			'EVENT_OCCURNAME'			=> $this->occurName,
			'EVENT_FIRSTOCCURED_TODAY'	=> (($date and ($this->date_debut == $date)) or !($this->recurrent)) ? true : false,
  			'LINK_EDIT_EVENT'			=> append_sid('index.php?i=calendrier&mode=edit_evenement&event='.$this->id),
  			'LINK_DELETE_EVENT'			=> append_sid('index.php?i=calendrier&action=delete_event&event='.$this->id),
  			);

  	//Si ce n'est pas un nested block :
  	if($boucle ==  false) {
	  	$template->assign_vars($infos);
  	} elseif ($nested != null) {
  		$template->assign_block_vars($nested.'.event', $infos);
  	} else {
  		$template->assign_block_vars('event', $infos);
  	}
  }

  /**
   * Cette fonction permet évidemment de créer un évènement et de l'ajouter dans la bdd.
   * Les droits de l'utilisateur sont vérifiés avant, il faut faire partie de DMI_STAFF pour cela
   * @param string $nom_evenement
   * @param int $date_debut
   * @param int $date_fin
   * @param string $description
   * @param int theme
   * @param int projet
   * @param string $lien
   */
  public function creer_evenement($nom_evenement, $date_debut, $date_fin, $description, $theme, $projet, $recurrent, $occurName = null, $lien = null)
  {
  	global $db, $user, $erreurs, $infos;

  	//Vérifions les droits de l'utilisateur
  	//if($user->data['DMI_STAFF'])
  	{
		if($date_debut == 0)
  			$erreurs[] = 'La date de d&eacute;but doit &ecirc;tre remplie, l\'&eacute;venement n\'a pas &eacute;t&eacute; ajout&eacute;.';
		else {
			if($date_fin == 0 || $date_fin < $date_debut || ($date_fin - $date_debut) < 86400)
				$date_fin = $date_debut + 86400;
		
			$insert = "INSERT INTO 
									" . CALENDRIER_EVENEMENT_TABLE . "
									(
										nom_evenement
										, date_debut
										, date_fin
										, description_evenement
										, theme
										, projet
										, lien
										, recurrent
										, occurName
										, recJour
										, recMois
									)
								VALUES 
									(
										'".$db->sql_escape($nom_evenement)."'
										, '".(int) $date_debut."'
										, '".(int) $date_fin."'
										, '".$db->sql_escape($description)."'
										, '".(int) $theme."'
										, '".(int) $projet."'
										, '".$db->sql_escape($lien)."'
										, '".(int) (($recurrent) ? 1 : 0) ."'
										, '".$db->sql_escape($occurName)."'
										, 0
										, 0
									)
							";
			$db->sql_query($insert);
			
			//On vérifie qu'on a bien modifié des éléments :
			$affected_rows = $db->sql_affectedrows();
			if($affected_rows > 0)
				$infos[] = 'Votre &eacute;v&egrave;nement a bien &eacute;t&eacute; ajout&eacute;';
			else
				$erreurs[] = 'L\'&eacute;v&egrave;nement n\'a pas pu &ecirc;tre ajout&eacute;, signalez le &agrave; un admin';
			
			//On affecte les attributs
			$this->nom = $nom_evenement;
			$this->description = $description;
			$this->date_debut = $date_debut;
			$this->date_fin = $date_fin;
			$this->theme = new Categorie($theme);
			$this->lien = $lien;
			$this->projet = new Projet((int) $projet);
			$this->id = $db->sql_nextid();
			
			//Si il y a de la récurrence alors on note le jour et le mois de l'anniversaire :
			if($recurrent) {
				$update = "UPDATE
							" . CALENDRIER_EVENEMENT_TABLE . "
						SET
							recJour = '". (int) (date('d', $date_debut)) . "'
							, recMois = '". (int) (date('m', $date_debut)) . "'
						WHERE
							id_evenement = '". (int) $this->id . "'";
				$db->sql_query($update);
			}
		}
  	}
  //	else
  			//$erreurs[] = 'Vous n\'avez pas les droits pour ajouter un &eacute;v&egrave;nement au calendrier.';
  }

   /**
   * Cette fonction permet évidemment d'éditer un évènement.
   * Les droits de l'utilisateur sont vérifiés avant, il faut faire partie de DMI_STAFF pour cela
   * @param string $nom_evenement
   * @param int $date_debut
   * @param int $date_fin
   * @param string $description
   * @param int theme
   * @param int projet
   * @param string $lien
   */
  public function editer_evenement($nom_evenement, $date_debut, $date_fin, $description, $theme, $projet, $recurrent, $occurName = null, $lien = null)
  {
  	global $db, $user, $erreurs, $infos;
  	
  	//Vérifions les droits de l'utilisateur
  	//if($user->data['DMI_STAFF'])
  	{
		if($date_debut == 0)
  			$erreurs[] = 'La date de d&eacute;but doit &ecirc;tre remplie, l\'&eacute;venement n\'a pas &eacute;t&eacute; ajout&eacute;.';
		else {
			if($date_fin == 0)
				$date_fin = $date_debut + 86400;
				$update = "UPDATE
							" . CALENDRIER_EVENEMENT_TABLE . "
						SET
							nom_evenement = '".$db->sql_escape($nom_evenement)."'
							, date_debut =  '".(int) $date_debut."'
							, date_fin =  '".(int) $date_fin."'
							, description_evenement = '".$db->sql_escape($description)."'
							, theme = '".(int) $theme."'
							, projet = '".(int) $projet."'
							, lien =  '".$db->sql_escape($lien)."'
							, recurrent = '".(int) (($recurrent) ? 1 : 0) ."'
							, occurName = '".$db->sql_escape($occurName)."'
						WHERE
							id_evenement = '".(int) $this->id."'";
			$db->sql_query($update);
			
			//On vérifie qu'on a bien modifié des éléments :
			$affected_rows = $db->sql_affectedrows();
			if($affected_rows > 0)
				$infos[] = 'Votre &eacute;v&egrave;nement a bien &eacute;t&eacute; modif&eacute;';
			else
				$erreurs[] = 'L\'&eacute;v&egrave;nement n\'a pas pu &ecirc;tre modifi&eacute;, signalez le &agrave; un admin';
			
			//On affecte les attributs
			$this->nom = $nom_evenement;
			$this->description = $description;
			$this->date_debut = $date_debut;
			$this->date_fin = $date_fin;
			$this->theme = new Categorie($theme);
			$this->lien = $lien;
			$this->projet = new Projet($projet);
			
			//Si il y a de la récurrence alors on note le jour et le mois de l'anniversaire :
			if($recurrent) {
				$update = "UPDATE
							" . CALENDRIER_EVENEMENT_TABLE . "
						SET
							recJour = '". (int) (date('d', $date_debut)) . "'
							, recMois = '". (int) (date('m', $date_debut)) . "'
						WHERE
							id_evenement = '".(int) $this->id."'";
				$db->sql_query($update);
			} else {
				$update = "UPDATE
							" . CALENDRIER_EVENEMENT_TABLE . "
						SET
							recJour = NULL
							, recMois = NULL
						WHERE
							id_evenement = '".(int) $this->id."'";
				$db->sql_query($update);
			}
		}
  	}
  //	else
  			//$erreurs[] = 'Vous n\'avez pas les droits pour ajouter un &eacute;v&egrave;nement au calendrier.';
  }
  
  /**
   * Ceci supprime l'�v�nement de la bdd.
   */
  public function supprimer_evenement()
  {
  	global $db, $user, $infos, $erreurs;
  	
  	//Vérifions les droits de l'utilisateur
  	//if($user['DMI_STAFF'])
  	{
  		$delete = "DELETE FROM
  						" . CALENDRIER_EVENEMENT_TABLE . "
  					WHERE
  						id_evenement = '".$this->id."'";
  		$db->sql_query($delete);
  		$infos[] = 'L\'&eacute;v&egrave;nement a bien &eacute;t&eacute; supprim&eacute;.';
  	}
  	//else
  		//$erreurs[] = 'Vous n\'avez pas les droits pour supprimer un &eacute;v&egrave;nement du calendrier.';
  }
  
  public function getID() {
  	return $this->id;
  }
  
  public function getNom() {
  	return $this->nom;
  }
  
  public function getDateDebut() {
  	return $this->date_debut;
  }
  
  public function getDateFin() {
  	return $this->date_fin;
  }
  
  public function getLien() {
  	return $this->lien;
  }
  
  public function getTheme() {
  	return $this->theme;
  }
  
  public function getDescription() {
  	return $this->description;
  }
  
  public function getProjet() {
  	return $this->projet;
  }

}
?>
